#include <stdlib.h>
#include <string.h>
#include <iostream>
#include "loadtxt.h"
#include "equip.h"

using namespace std;

EquipBaseItem::EquipBaseItem()
{
    m_type = ITEM_EQUIP_TYPE;
    memset(m_templateItem, NULL, sizeof(m_templateItem));
}

void EquipBaseItem::makeItem(Item& aItem) const
{
    EquipData* pEquipData =  (EquipData*)(aItem.data);
    EquipTemplateData* pTemplateData = m_templateItem[aItem.getID()];
    if (NULL != pTemplateData)
    {
        pEquipData->stamina = pTemplateData->stamina;
        pEquipData->defense = pTemplateData->defense;
        //and so on
    }
}

void EquipBaseItem::doActionItem(int aActionID, Item& aItem) const
{
    EquipData* pEquipData = (EquipData*)aItem.data;
    EquipTemplateData* pTemplateEquip = m_templateItem[aItem.getID()];

    if (NULL != pTemplateEquip)
    {
        switch(aActionID)
        {
        case Use_Item:
            if (pTemplateEquip->hasScript)
            {
                //AlHelper::Callfunction<asDWORD>(pTemplateEquip->scriptFileName.c_str(), "void useitem(int)", 3);
            }

            cout << "Use Item" << endl;
            break;
        }
    }
}

void EquipBaseItem::loadItemTemplate(const char* aFileName)
{
    g_loadtxt(aFileName, parseEquipTemplateItem, ',', dynamic_cast<void*>(this));
    g_baseItemMgr.registerTypeItem(this);
}

void EquipBaseItem::parseTemplateItem(const char* parray[], int aArrlen)
{
    if (aArrlen != EQUIP_TEMPLATE_STRNUM)
    {
        return;
    }

    EquipTemplateData*  pNewTemplateEquip= new EquipTemplateData;
    if (NULL == pNewTemplateEquip)
    {
        return;
    }

    for (int i = 0; i < aArrlen; i++)
    {
        cout << parray[i] << endl;
    }

    pNewTemplateEquip->id = atoi(parray[0]);
    pNewTemplateEquip->stamina = atoi(parray[1]);
    pNewTemplateEquip->defense = atoi(parray[2]);
    pNewTemplateEquip->anydata = atoi(parray[3]);
    pNewTemplateEquip->scriptFileName = parray[4];

    g_baseItemMgr.registerIdItem(this, pNewTemplateEquip->id);

    //if (AlHelper::ComplieScript(pNewTemplateEquip->scriptFileName.c_str()))
    //{
    //pNewTemplateEquip->hasScript = true;
    //}

    m_templateItem[pNewTemplateEquip->id] = pNewTemplateEquip;
}

void EquipBaseItem::parseEquipTemplateItem(const char* strArray[], int aArrayLen, void* aArg)
{
    EquipBaseItem* pEquipBaseItem = (EquipBaseItem*)aArg;
    if (NULL != pEquipBaseItem)
    {
        pEquipBaseItem->parseTemplateItem(strArray, aArrayLen);
    }
}
